//package com.yunhe.device.service.base.impl;
//
//import com.yunhe.device.domain.base.DeviceType;
//import com.yunhe.common.exception.ArgumentErrorException;
//import com.yunhe.common.exception.ObjectNotFoundException;
//import com.yunhe.common.exception.UniqueConstraintsException;
//import com.yunhe.device.repository.base.DeviceTypeRepository;
//import com.yunhe.device.service.base.DeviceTypeService;
//import com.yunhe.common.util.QueryUtil;
//import com.yunhe.common.util.StringUtil;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.Optional;
//
///**
// * 设备类型Service
// * @desc 设备类型服务类实现
// * @author liuronglei
// */
//@Service
//public class DeviceTypeServiceImpl implements DeviceTypeService {
//    @Autowired
//    private DeviceTypeRepository deviceTypeRepository;
//
//    /**
//     * 设备类型对象处理和判断
//     * @param deviceType 设备类型对象
//     */
//    private void processBeforeSave(DeviceType deviceType)
//            throws ArgumentErrorException, UniqueConstraintsException {
//        //判断设备类型代码、编号、标题是否为空
//        if (deviceType.getCode() == null
//                || StringUtil.isEmpty(deviceType.getName())
//                || StringUtil.isEmpty(deviceType.getTitle())) {
//            throw new ArgumentErrorException("设备类型代码、编号、标题不能为空");
//        }
//        //判断代码是否已存在
//        DeviceType typeByCode = this.findByCode(deviceType.getCode());
//        if (typeByCode != null) {
//            if (deviceType.getId() == null || typeByCode.getId().longValue() != deviceType.getId().longValue()) {
//                throw new UniqueConstraintsException("该设备类型代码已存在");
//            }
//        }
//        //判断编号是否已存在
//        DeviceType typeByName = this.findByName(deviceType.getName());
//        if (typeByName != null) {
//            if (deviceType.getId() == null || typeByName.getId().longValue() != deviceType.getId().longValue()) {
//                throw new UniqueConstraintsException("该设备类型编号已存在");
//            }
//        }
//        //如果序号为空，则默认为代码
//        if (deviceType.getSn() == null && deviceType.getCode() != null) {
//            deviceType.setSn(deviceType.getCode());
//        }
//    }
//
//    /**
//     * 新增设备类型
//     * @param deviceType 设备类型对象
//     */
//    @Transactional
//    public DeviceType createDeviceType(DeviceType deviceType)
//            throws ArgumentErrorException, UniqueConstraintsException {
//        deviceType.setId(null);
//        processBeforeSave(deviceType);
//        return deviceTypeRepository.save(deviceType);
//    }
//
//    /**
//     * 删除设备类型
//     * @param deviceTypeId 设备类型ID
//     */
//    @Transactional
//    public void deleteDeviceType(Long deviceTypeId) {
//        deviceTypeRepository.deleteById(deviceTypeId);
//    }
//
//    /**
//     * 更新设备类型（更新全部字段）
//     * @param deviceType 设备类型对象
//     */
//    @Transactional
//    public DeviceType updateDeviceType(DeviceType deviceType)
//            throws ArgumentErrorException, UniqueConstraintsException, ObjectNotFoundException {
//        boolean exists = deviceType.getId() != null && deviceTypeRepository.existsById(deviceType.getId());
//        if (!exists) {
//            throw new ObjectNotFoundException("找不到ID为" + deviceType.getId() + "的设备类型");
//        }
//        processBeforeSave(deviceType);
//        return deviceTypeRepository.save(deviceType);
//    }
//
//    /**
//     * 更新设备类型（更新指定字段）
//     * @param deviceTypeId 设备类型ID
//     * @param code 代码
//     * @param name 编号
//     * @param title 标题
//     * @param sn 排序序号
//     * @param activity 是否可用
//     */
//    @Override
//    @Transactional
//    public DeviceType updateDeviceType(Long deviceTypeId,
//                                       Long code,
//                                       String name,
//                                       String title,
//                                       Long sn,
//                                       Boolean activity)
//            throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException {
//        DeviceType deviceType = this.findByDeviceTypeId(deviceTypeId);
//        if (deviceType == null) {
//            throw new ObjectNotFoundException("找不到ID为" + deviceTypeId + "的设备类型");
//        }
//        Optional.ofNullable(code).ifPresent(deviceType::setCode);
//        Optional.ofNullable(name).ifPresent(deviceType::setName);
//        Optional.ofNullable(title).ifPresent(deviceType::setTitle);
//        Optional.ofNullable(sn).ifPresent(deviceType::setSn);
//        Optional.ofNullable(activity).ifPresent(deviceType::setActivity);
//        processBeforeSave(deviceType);
//        return deviceTypeRepository.save(deviceType);
//    }
//
//    /**
//     * 根据ID获得设备类型对象
//     * @param id 状态ID
//     */
//    public DeviceType findByDeviceTypeId(Long id) {
//        return deviceTypeRepository.findById(id).orElse(null);
//    }
//
//    /**
//     * 根据代码获得设备类型对象
//     * @param code 代码
//     */
//    public DeviceType findByCode(Long code) {
//        return deviceTypeRepository.findByCode(code);
//    }
//
//    /**
//     * 根据编号获得设备类型对象
//     * @param name 编号
//     */
//    public DeviceType findByName(String name) {
//        return deviceTypeRepository.findByName(name);
//    }
//
//    /**
//     * 获得全部设备类型对象
//     */
//    public Iterable<DeviceType> findDeviceTypes() {
//        return deviceTypeRepository.findAll(QueryUtil.defaultSort());
//    }
//
//    /**
//     * 根据设备代码获得设备节点标签信息
//     * @param devCode 设备代码
//     */
//    public DeviceType findDeviceTypeByDevCode(Long devCode) {
//        String typeString = deviceTypeRepository.findDeviceTypeByDevCode(devCode);
//        if (StringUtil.isEmpty(typeString)) {
//            return null;
//        }
//        String[] strings = typeString.split(",");
//        DeviceType result = null;
//        for (String str : strings) {
//            if (!str.startsWith("svg")) {
//                DeviceType deviceType = findByName(str);
//                if (deviceType != null) {
//                    result = deviceType;
//                    break;
//                }
//            }
//        }
//        return result;
//    }
//}
